#ifndef __IPI_H__
#define __IPI_H__

#include "libs/types.h"
#include "kernel/interrupt/interrupt.h"

#define IPIHPET_VECTOR 0xC9
#define IPISCHEDULE_VECTOR 0xCA



class IpiHandler : public interrupthandler
{
private:
    /* data */
public:
    IpiHandler(uint64_t/* args */);
    ~IpiHandler();
	virtual StackFrame* handleInterrupt(StackFrame* fs);

};


class IpiHpetHandler : public IpiHandler
{
private:
    /* data */
public:
    IpiHpetHandler(uint64_t/* args */);
    ~IpiHpetHandler();
	virtual StackFrame* handleInterrupt(StackFrame* fs);

};




class IpiScheduleHnalder : public IpiHandler
{
private:
    /* data */
public:
    IpiScheduleHnalder(uint64_t/* args */);
    ~IpiScheduleHnalder();
	virtual StackFrame* handleInterrupt(StackFrame* fs);

};





class IpiManager
{
private:
    /* data */
public:

    static IpiManager* ipim;
    IpiHandler* hpetHandler;
    IpiHandler* scheduleHandler;

    IpiManager(/* args */);
    ~IpiManager();
    void sendIpi(uint64_t cpuId,uint64_t);

};





#define IPIMANAGER \
IpiManager::ipim


#endif